package com.gopay.remote.fundcps.service;

import com.gopay.common.domain.fund.vo.FileBizParam;
import com.gopay.common.exception.FundException;

/*
 * Copyright (c) 2016. www.gopay.com.cn Inc.All rights reserved.
 * 文件名称 : FileHandlerService
 * 创建日期 : 17/3/31 10:46
 * 描述 : 国付宝--基金--银行 文件交互类
 * 注解 : Y为必填; N为非必填
 * Author  : baiyunpeng
 */
public interface FileHandlerService {

    /**
     * 签约文件生成方法 : 以下为参数
     * param settleDay 清算日期 T日15:00后生成  文件名为T日  传入参数T日
     * param merchantIds 客户ID集合; console:Y ; corn:Y
     * param source 来源 : console或者corn
     * @param  optionalParam 自选入参 ; eg : superviseAgreementFile(new FileBizParam(settleDay,merchantIds,source))
     * @return
     */
    String superviseAgreementFile(FileBizParam optionalParam);

    /**
     * 绑卡文件生成 : 以下为参数
     * param settleDay 清算日期 T日15:00后生成  文件名为T日  传入参数T日
     * @param  optionalParam 自选入参 ; eg : superviseBindCardFile(new FileBizParam(settleDay))
     * @return
     */
    String superviseBindCardFile(FileBizParam optionalParam);


    /**
     * 赎回分红退款文件入库 : 以下为参数
     * param settleDay 清算日期 传入参数T日 12点前
     * param source 来源 : console或者corn
     * param merchantIds 客户ID集合; console:Y ; corn:Y
     * @param  optionalParam 自选入参 ; eg : superviseRedeemFile(new FileBizParam(settleDay,source,merchantIds))
     * @return
     */
    String superviseRedeemFile(FileBizParam optionalParam);

    /**
     * 赎回分红结果文件
     * param settleDay 清算日期 传入参数T日 文件名称为T+1日 数据来源(基金公司T+1日12点前采集的T-1 15:00 -- T日15:00的时间)
     * param reGeneration 重新生成或首次生成 console:Y ; corn:N
     * param merchantIds 客户ID集合; console:Y ; corn:Y
     * param source 来源
     * @param  optionalParam 自选入参 ; eg : superviseRedeemResultFile(new FileBizParam(settleDay,source,merchantIds,reGeneration))
     * @return
     */
    String superviseRedeemResultFile(FileBizParam optionalParam);



    /**
     * 基金转国付宝文件 : 以下为参数
     * param settleDay 传入参数 T日 T+1日12点前生成  (T-1日 15:00 ---T日 15:00)数据 文件名称T+1
     * param source 来源
     * param dictate 基金转国付宝文件分为总文件和分文件 console:Y corn:Y
     * param reGeneration 重新生成或首次生成 console:Y ; corn:N
     * param merchantIds 客户ID集合; console:Y ; corn:Y
     * @param  optionalParam 自选入参 ; eg : superviseWithdrawFile(new FileBizParam(settleDay,source,dictate,merchantIds,reGeneration))
     * @return
     */
    String superviseWithdrawFile(FileBizParam optionalParam);


    /**
     * 赎回分红退款结果对账文件 : 以下为参数
     * param settleDay 传入参数 T日
     * param merchantIds  客户ID集合; console:Y ; corn:Y
     * param source 来源
     * @param  optionalParam 自选入参 ; eg : superviseAgreementFile(new FileBizParam(settleDay,merchantIds,source))
     * @return
     */
    String redeemPayCheck(FileBizParam optionalParam);

    /**
     * 基金转国付宝走账
     * @param optionalParam
     * @return
     */
    String fund2GopayTransferMoney(FileBizParam optionalParam);

    /**
     *国付宝提供给基金公司的申购认购对账文件  T日15:20前生成   文件名称为T日 (数据来源为：结算时间为T+1的所有的申购认购订单)  包含支付成功和失败的
     * String settleDay,boolean reGeneration,List<String> merchantIds
     */
    String fundAllocationCheckFileFirst(FileBizParam optionalParam);

    /**
     *国付宝提供给基金公司的申购认购对账文件  T日17:00前生成   文件名称为T日 (数据来源为：结算时间为T+1的所有的申购认购订单)  包含支付成功和失败的
     * String settleDay,boolean reGeneration,List<String> merchantIds,boolean isLast
     */
    String fundAllocationCheckFile(FileBizParam optionalParam);

    /**
     * 国付宝提供给监管行的资金调拨文件（1文件）  T日18:30前生成   文件名称为T日 (数据来源为：结算时间为T+1的支付完成的申购认购订单)
     * settleDay:结算日期
     * String settleDay, boolean reGeneration,List<String> merchantIds
     */
    String superviseAllocationFile(FileBizParam optionalParam);

    /**
     * 国付宝提供给监管行的理财转基金文件（28文件）  T+1日10：00前生成   文件名称为T日 (数据来源为：结算时间为T+1的支付完成的申购认购订单)
     * * settleDay:结算日期
     * String settleDay, boolean reGeneration,List<String> merchantIds
     */
    String superviseTransferFile(FileBizParam optionalParam);

    /**
     * 国付宝提供给监管行的撤单文件（9文件）  T+1日10：00前生成   文件名称为T日 (数据来源为：空)
     * * settleDay:结算日期
     * String settleDay, boolean reGeneration,List<String> merchantIds
     */
    String superviseCancleFile(FileBizParam optionalParam);

    /**
     * 与基金公司赎回对账 15:30
     * @param optionalParam
     * @return
     */
    String redeemCheck(FileBizParam optionalParam) throws FundException;

    /**
     * 校验调拨文件，银行1对账之后的差异文件，和后续处理流程
     * @param optionalParam
     * @return
     */
    String checkAllocationFileDiff(FileBizParam optionalParam);

    /**
     * 校验理财转基金文件（28文件），银行A对账之后的差异文件，和后续处理流程
     * @param optionalParam
     * @return
     */
    String checkTransferFileDiff(FileBizParam optionalParam);

}
